#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//@ 位运算

// **按位取反

// 源码 0000 0010
//反码 0000 0010
//补码 0000 0010

// 补码计算
// 1111 1101
// 还原
// 1000 0010
// 1000 0011
void test(){
    int num = 2;
    printf("%d\n", ~num);
}

// & 位与

// 可以和1 位于  结果是1 是奇数  结果是0 为偶数

void test2(){
    int num = 237;

    if ( (num&1) == 0){
        printf("this num is odd");
    }else{
        printf("even");
    }
}

// | 位或

// ^ 异或
// 交换变量
void test3(){
    int num1 = 3;
    int num2 = 5;

    num1 = num1^num2;
    num2 = num1^num2;
    num1= num2^num1;

    num1 = num1+num2;
    num2 = num1-num2;
    num1 = num1-num2;

    printf("%d,%d\n", num1,num2);
}

// 位移



int main(){

    test();

    test2();

    test3();

    return 0;
}